package br.com.ads.sgse.managedBean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import br.com.ads.dao.DAO;
import br.com.ads.dao.JPAUltil;
import br.com.ads.sgse.entity.Disciplina;
import br.com.ads.sgse.entity.DisciplinaTurma;
import br.com.ads.sgse.entity.EtapaSerie;
import br.com.ads.sgse.entity.Professor;
import br.com.ads.sgse.entity.Turma;

@ManagedBean(name = "turmaBean")
@SessionScoped
public class TurmaBean implements Serializable{
	
	
	private static final long serialVersionUID = 1L;

	private String nome;
	
	private String anoLetivo;
	
	private String modalidade;
	
	private Turma turma = new Turma();

	private List<Turma> turmas;
	
	private List<Turma> turmasPesquisar;
	
	private DAO<Turma> dao = new DAO<Turma>(Turma.class);

	private EtapaSerie etapaserie = new EtapaSerie();

	private DisciplinaTurma disciplinaTurma = new DisciplinaTurma();
	
	private DisciplinaTurma disciplinaTurmaSelecionada = new DisciplinaTurma();

	private Professor professorSelecionado = new Professor();
	
	private List<DisciplinaTurma> disciplinasTurma;

	private List<EtapaSerie> etapasSeries;

	private EntityManager em = new JPAUltil().getEntityManager();

	private String parameter;

	public String getParameter() {
		return parameter;
	}

	public void setParameter(String parameter) {
		this.parameter = parameter;
	}

	/** ACTIONS **/

	@SuppressWarnings("unused")
	@PostConstruct
	private void init() {
		//getAllTurmas();
	}
	
	@SuppressWarnings("unchecked")
	public List<Turma> getTurmasByNome() {
		Query q;
		turmas = null;
		try {
			if (!modalidade.equals("")) {
				q = em.createQuery("select t from Turma t where t.modalidade=:md");
				q.setParameter("md", modalidade);				
								
			}
			else {
				q = em.createQuery("SELECT t FROM Turma t WHERE upper(t.anoLetivo) like upper(:anoLetivo)");
				q.setParameter("anoLetivo", anoLetivo);
			}
			
			turmas = q.getResultList();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return turmasPesquisar;

	}
	
	
	

	
	public void carregarDisciplinaTurma(ActionEvent e) {
				
		for (Disciplina d: turma.getEtapaSerie().getDisciplinas()){
			disciplinaTurma.setDisciplina(d);
			disciplinaTurma.setTurma(turma);
			turma.getDisciplinaTurmas().add(disciplinaTurma);
			disciplinaTurma = new DisciplinaTurma();
		}
		
		

	}
	
	public void vincularProfessor(ActionEvent e) {
		disciplinaTurmaSelecionada.setProfessor(professorSelecionado);
	}
	
	 public void addVinculo() { 
	//disciplinaTurma.setDisciplina(daodisciplinas.buscaPorId(disciplinaId));
	if (!turma.getDisciplinaTurmas().contains(disciplinaTurma)) {
	 disciplinaTurma.setTurma(turma);
	 turma.getDisciplinaTurmas().add(disciplinaTurma); } disciplinaTurma = new
	 DisciplinaTurma();}
	
	public String salvar() {
		try {
			if (turma.getId() == null) {
				dao.adiciona(turma);
			} else {
				dao.atualiza(turma);
			}

			getAllTurmas();
			turma = new Turma();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public void remove() {
		try {
			dao.remove(turma);
			getAllTurmas();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void getAllTurmas() {
		try {
			setTurmas(dao.listaTodos());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void getTurmaByNumero() {
		try {
			Query q = em
					.createQuery("SELECT tm FROM Turma tm WHERE tm.numero=:numero");
			q.setParameter("numero", new Long(parameter));
			turma = (Turma) q.getSingleResult();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Turma getTurma() {
		return turma;
	}

	public void setTurma(Turma turma) {
		this.turma = turma;
	}

	public void setTurmas(List<Turma> turmas) {
		this.turmas = turmas;
	}

	public List<Turma> getTurmas() {
		return turmas;
	}

	public DisciplinaTurma getdisciplinaTurma() {
		return disciplinaTurma;
	}

	public void setdisciplinaTurma(DisciplinaTurma disciplinaTurma) {
		this.disciplinaTurma = disciplinaTurma;
	}

	public EtapaSerie getEtapaserie() {
		return etapaserie;
	}

	public void setEtapaserie(EtapaSerie etapaserie) {
		this.etapaserie = etapaserie;
	}

	public DisciplinaTurma getDisciplinaTurma() {
		return disciplinaTurma;
	}

	public void setDisciplinaTurma(DisciplinaTurma disciplinaTurma) {
		this.disciplinaTurma = disciplinaTurma;
	}

	public List<DisciplinaTurma> getDisciplinasTurma() {
		return disciplinasTurma;
	}

	public void setDisciplinasTurma(List<DisciplinaTurma> disciplinasTurma) {
		this.disciplinasTurma = disciplinasTurma;
	}

	public List<EtapaSerie> getEtapasSeries() {
		return etapasSeries;
	}

	public void setEtapasSeries(List<EtapaSerie> etapasSeries) {
		this.etapasSeries = etapasSeries;
	}
	
	public DisciplinaTurma getDisciplinaTurmaSelecionada(){
		return this.disciplinaTurmaSelecionada;
	}
	
	public void setDisciplinaTurmaSelecionada(DisciplinaTurma disciplinaTurmaSelecionada){
		this.disciplinaTurmaSelecionada = disciplinaTurmaSelecionada;
	}

	public Professor getProfessorSelecionado(){
		return this.professorSelecionado;
	}
	
	public void setProfessorSelecionado(Professor professorSelecionado){
		this.professorSelecionado = professorSelecionado;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}


	public String getAnoLetivo() {
		return anoLetivo;
	}

	public void setAnoLetivo(String anoLetivo) {
		this.anoLetivo = anoLetivo;
	}

	public List<Turma> getTurmasPesquisar() {
		return turmasPesquisar;
	}

	public void setTurmasPesquisar(List<Turma> turmasPesquisar) {
		this.turmasPesquisar = turmasPesquisar;
	}

	public void setModalidade(String modalidade) {
		this.modalidade = modalidade;
	}

	public String getModalidade() {
		return modalidade;
	}
	

}
